 /**
 * 逻辑、功能相关描述: <br>
 *
 * @author 付湘辉  <br>
 * 编写日期：2008-8-12  <br>
 */
package com.ce.pms.charge.dao;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.ce.pms.base.dao.IPmsBaseDao;
import com.ce.pms.charge.model.AbstractTrans;
import com.ce.pms.charge.model.AccountDomain;
import com.ce.pms.charge.vo.ChargeDetailSearchVO;
import com.ce.pms.charge.vo.DepositTransSearchVO;
import com.sitechasia.webx.core.support.Page;

/**
 * 	名称: com.ce.pms.charge.dao.ITransactionDao <br>
 *  交易Dao
 *
 * @author  付湘辉  <br>
 * Created on： 2008-8-12 <br>
 * @author <br>
 * update on： <br>
 * why: <br>
 */
public interface ITransactionDao extends IPmsBaseDao<AbstractTrans> {

	/**
	 * 功能描述:查询指定的房间指定周期是否有出盘锁定状态的交易，如果有则返回true<br>
	 * @param houseid
	 * @param periodId
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-11-5<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public Boolean isHouseTransactionLocked(Long houseid,Long periodId);

	/**
	 * 功能描述: 获取出盘锁定状态的交易数量 <br>
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-10-8  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Integer getOutLocakTransactionCount();

	/**
	 * 功能描述: 根据主交易ID 查找支付方式及金额 <br>
	 * @param transId
	 * @return
	 * Create author:黄彦军 <br>
	 * Create on:2008-10-9  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List getPayListByTransId(Long transId);
	
	/**
	 * 功能描述:查询押金子账户的相关押金收款交易分页列表，
	 * 使用depositTransSearchVO中subAccountId条件进行查询  <br>
	 * @param depositTransSearchVO
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2009-1-9  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Page queryDepositTransVOByPage(DepositTransSearchVO depositTransSearchVO);

	/**
	 * 功能描述: 得到指定子账户和交易类型的交易记录列表 <br>
	 * @param subAccountId
	 * @param clazz 交易类型
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-7  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<AbstractTrans> getTransBysubaccountIdAdnclazz(Long subAccountId,String clazz);

	/**
	 * 功能描述: 查询交易表(FEE_TRANSACTION)当天收费记录数 <br>
	 * @param clazz 交易类型
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-7  <br>
	 * Edit author: 付湘辉 <br>
	 * Edit on:2008-12-30    <br>
	 * Why: 为统一调用，在收费凭证Dao已有相同功能实现    <br>
	 */
	@Deprecated
	public Integer getCurDayChargeTimes(String clazz);

	/**
	 * 功能描述:根据收费凭证 ID 查询主交易信息  <br>
	 * @param voucherId
	 * @return
	 * Create author:黄彦军 <br>
	 * Create on:2008-10-8  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List getTransByVoucherId(Long voucherId);

	/**
	 * 功能描述: 得到指定帐户下交易数量 <br>
	 * @param accountDo
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-2  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Long getTransCountByAccount(AccountDomain accountDo);

	/**
	 * 功能描述: 得到指定帐户id下交易数量 <br>
	 * @param accountId 帐户id
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-2  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Long getTransCountByAccount(Long accountId);

	/**
	 * 功能描述:根据主交易ID 查找支付关系的子交易  <br>
	 * @param transId
	 * @return
	 * Create author:黄彦军 <br>
	 * Create on:2008-10-8  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List getVoucherSubtransByTransId(Long transId,String sortStr);

	/**
	 * 功能描述: 查询指定应收交易id的其下子交易金额列表 <br>
	 * @param transId 交易id
	 * @param relationType 交易关系类型001,002,003
	 * @param withoutLatefee 是否排除滞纳金
	 * @param status 交易状态
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-9  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<BigDecimal> queryDebitSubTransDebitList(Long transId,String relationType,boolean withoutLatefee, String status);


	/**
	 * 功能描述: 查询支付明细信息，如果是多重支付，返回子支付信息 <br>
	 * 注意：返回的page分页对象list数据中是Object[]，结果中应收交易全是已缴状态 <br>
	 * [0]：交易id TRANSACTION_ID<br>
	 * [1]：应收交易金额 DEBIT<br>
	 * [2]：实收交易金额 CREDIT<br>
	 * [3]：交易名称(BIZ_CODE+'-'+DESCRIPTION 交易码+'-'+交易描述 )<br>
	 * [4]：收费周期(PERIOD 如：200808)<br>
	 * [5]：记账日期 即创建日期SYSDATE<br>
	 * [6]：交易类型，CLAZZ_CODE<br>
	 * [7]：父交易id，M_TRANS_ID<br>
	 * @param payTransId
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-16  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<Object[]> queryPayDetailList(Long payTransId);


	/**
	 * 功能描述:查询指定帐户的预交款的交易<br>
	 * @param accountId
	 * @param pageNo
	 * @param pageSize
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-10-14<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public Page queryPrePayTrans(Long accountId,int pageNo,int pageSize);

	/**
	 * 功能描述: 查询指定子账户的费用明细信息 <br>
	 * <ul>查询规则：
	 * <li>根据参数searchVo中所含有的字段的值判断；
	 * 必须指定searchVo中subAccountId，
	 * 应该注意当isPreviousPeriod字段被设为true值时，
	 * 表示指定了一个以往的收费周期，
	 * 此时查询指定收费周期的所有衍生交易，其余条件不变。</li>
	 * </ul>
	 * 注意：返回的page分页对象list数据中是Object[] <br>
	 * [0]：交易id TRANSACTION_ID<br>
	 * [1]：子账户id SUB_ACCOUNT_ID<br>
	 * [2]：交易金额 DEBIT 或 CREDIT<br>
     * [3]：交易类型 CLAZZ_CODE<br>
	 * [4]：交易状态(STATUZ，如果是实收交易则是"-")<br>
	 * [5]：来源产权房id HOUSE_ID<br>
	 * [6]：收费标准当前版本id STA_HIS_ID<br>
	 * [7]：凭 证id VOUCHER_ID<br>
	 * [8]：交易名称(BIZ_CODE+'-'+DESCRIPTION 交易码+'-'+交易描述 )<br>
	 * [9]：收费周期(PERIOD 如：200808)<br>
	 * [10]：交易摘要，即备注字段 REMARK<br>
	 * [11]：记账日期 即创建日期SYSDATE<br>
	 * [12]：消费日期，INPUT_DATE<br>
	 * [13]：操作人id CREATOR<br>
	 * [14]：所属主交易id TRANSACTION_ID1<br>
	 * @param searchVo
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-9-9  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<Object[]> queryTransactionBy(ChargeDetailSearchVO searchVo);

	/**
	 * 功能描述: 获取指定子账户和交易状态的交易数量 <br>
	 * @param subAccountId 子账户id
	 * @param status 交易状态
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-10-8  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Long getTransactionCountByIdStatus(Long subAccountId, String status);

	/**
	 * 功能描述:批量更新交易的状态<br>
	 * @param transactionIds
	 * @param status<br>
	 * Create author:罗军林<br>
	 * Create on:2008-9-27<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void updateTransactionStatus(List<Long> transactionIds, String status);

	/**
	 * 功能描述:批量更新交易指定子帐户且状态为出盘锁定的状态<br>
	 * @param status key 子帐户ID，value 状态
	 * Create author:罗军林<br>
	 * Create on:2008-9-27<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void updateTransactionStatus(Map<Long,String> status);

	/**
	 * 功能描述:批量更新指定主交易的从属交易状态为主交易状态<br>
	 * @param masterIds<br>
	 * Create author:罗军林<br>
	 * Create on:2008-10-7<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public void updateTransactionStatusByMasterId(List<Long> masterIds);

}
